#include <cstdio>
#include <algorithm>
using namespace std;
const int N=10050;
const int INF=0x3f3f3f3f;
int a[N];
int g[N];
int main(void){
    int n;
    while(~scanf("%d",&n)){
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=n;i++){
            g[i]=INF;
        }
        int ans=0;
        for(int i=0;i<n;i++){
            int k=lower_bound(g+1,g+n,a[i])-g;
            g[k]=a[i];
            ans=max(ans,k);
        }
        printf("%d\n",ans);
    }
    return 0;
}